from flask import current_app, app
from flask import json
from flask import jsonify
from flask import request
from ihome_blue import ihome_blue
from init import redis_store
from models import House, Area
from utils.response_code import RET

"""
   功能：创建/返回 主页
   请求路径：/api/v1.0/
   :return:
   """
@ihome_blue.route('/')
def show():
    return current_app.send_static_file('html/index.html')

@ihome_blue.route('/<path:filename>')
def template(filename):
    if filename != "favicon.ico":
        filename = "html/" + filename
    return current_app.send_static_file(filename)

# 主页点击图片进入详情页面
@ihome_blue.route('/houses/<int:house_id>')
def houses(house_id):
    if not house_id:
        return jsonify(errno=RET.NODATA,errmsg='参数不全')
    # 查询房源信息
    try:
        houses = House.query.filter(House.id == house_id).first()
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='获取房屋失败')
    # 转成字典列表
    house_detail = houses.to_basic_dict()
    print(house_detail)
    data = {
        "house": house_detail,

    }
    return jsonify(errmsg="OK",errno="0",data = data)


@ihome_blue.route('/houses/index', methods=["GET"])

def get_house():
    """
    功能：展示首页
    请求方式：GET、POST
    请求路径：/api/v1.0/houses/index
    请求参数：
    步骤：
        - 1.查询房屋信息，将房屋信息转成字典列表
    :return:
    """
    # 1.查询房屋信息，将房屋信息转成字典列表
    # 1.1从缓存中尝试获取数据
    try:
        ret = redis_store.get("home_page_data")
    except Exception as e:
        current_app.logger.error(e)
        ret = None
    if ret:
        # 因为redis中保存的是json字符串，所以直接进行字符串拼接返回
        return jsonify(errno=RET.OK, errmsg='获取成功',data=ret)
    else:
        # 1.2从mysql中查询房屋信息
        try:
            houses = House.query.order_by(House.order_count.desc()).limit(5).all()
        except Exception as e:
            current_app.logger.error(e)
            return jsonify(errno=RET.DBERR, errmsg='获取房屋信息失败')
        if not houses:
            return jsonify(errno=RET.NODATA, errmsg="无房屋信息")
        house_list = []
        for house in houses:
            # 如果房屋未设置主图片，则跳过
            if not house.index_image_url:
                continue
            house_list.append(house.to_basic_dict())

        # 将数据转换为json，并保存到redis缓存
        json_houses = json.dumps(house_list)
        try:
            redis_store.setex("home_page_data", 300, json_houses)
        except Exception as e:
            current_app.logger.error(e)

        # 拼接数据，返回响应
        data = house_list
        return jsonify(errno=RET.OK, errmsg='房屋信息获取成功', data=data)
@ihome_blue.route('/areas', methods=["GET"])
def get_area():
    """
    功能：展示首页
    请求方式：GET、POST
    请求路径：/api/v1.0/areas
    请求参数：
    步骤：
        - 1.查询城区信息，将城区列表转换成字典列表
    :return:
    """
    # 查询城区信息，将城区列表转换成字典列表
    try:
        areas = Area.query.all()
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='查询城区信息出错')
    areas_list = []
    for area in areas:
        areas_list.append(area.to_dict())

    return jsonify(errno=RET.OK, errmsg='城区信息查询成功',data=areas_list)

@ihome_blue.route('/search')
def search_house():
    """
    功能：根据城区、时间信息查询房屋
    请求参数：aid、aname、sd、ed
    请求方式：GET
    步骤：
        - 1.获取参数，进行校验
        - 2.根据
    :return:
    """
